<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Model\Cat;

class CatController extends Controller
{
//    /**
//     * 找子孙栏目
//     * @param $data  栏目数据源
//     * @param int $id
//     * @param int $lev
//     * @return array
//     */
//    protected  function  findGson($data,$id=0,$lev=0)
//    {
//        static $cat=[];
//        foreach($data as $k=>$v){
//            if($v->parent_id == $id){
//                $v->lev=$lev;
//                $cat[] = $v;
//                $this->findGson($data,$v->cat_id,$lev+1);
//            }
//        }
//        return $cat;
//
//    }
//
//
//    /**
//     * 格式化取出所有栏目 封装的
//     * @return array
//     */
//    protected function findAll()
//    {
//        $data = Cat::all();
//        /*dd($data);*/
//        //拿到子孙栏目数据
//        return  $this->findGson($data,0,0);
//    }
//
//
//    /**
//     * Display a listing of the resource.
//     *
//     * @return \Illuminate\Http\Response
//     */

    protected $Cat; //catModel
    //强制声明 Cat $cat
    public  function  __construct()
    {
        $this->Cat = new Cat();

    }

    public function index()
    {

       /*  1  分步获取
       //加载栏目主页
        //原始数据
        $datas = Cat::select('cat_id','cat_name','parent_id')->get();
        //调用findTree方法 id 0 lev 0 表示全部查询出来
        $cats = $this->findSon($datas,0,0);//查栏目出
        return view('admin.cat_index')->with('cats',$cats);*/

       // 1  定义在controller 中的类调用 直接挑用写好的方法
//        $cats = $this->findAll();

        //  2 定义在model中的调用
        /*$cat = new Cat();
        $cats = $cat->findAll();*/

        //  2 构造函数来调
        $cats =$this->Cat->findAll();
        return view('admin.cat_index')->with('cats',$cats);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //添加栏目页面
        // 1 定义在controller 中的类调用
//        $cats = $this->findAll();


        //  2 定义在model中的调用
        /*$cat = new Cat();
        $cats = $cat->findAll();*/

        //  2 构造函数来调
        $cats = $this->Cat->findAll();
        return view('admin.cat_add')->with('cats',$cats);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {

//    dd($request->all());
//        //错误信息提示
        $messages = [
            'cat_name.required' => '栏目是必填项',
            'max'      => 'description 标题不能超过255位',
            'between' => ':attribute 必须介于 :min - :max。',
        ];
        //后台的数据验证
        $this->validate($request, [
            'cat_name' => 'required|max:100|min:2',
        ],$messages);

        //获取数据'password' => bcrypt($data['password']),
//        $data = new Cat();

        //构造调
        $data = $this->Cat;
        $data->cat_name = $request->cat_name;
        $data->parent_id = $request->parent_id;
        $res = $data->save();
        return redirect('admin/cat');

    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
//        $data = Cat::find($id);

        //构造调
        $data = $this->Cat->find($id);
        //查出所有的栏目
        $cats = $this->Cat->findAll();
        return view('admin.cat_edit')->with('data',$data)->with('cats',$cats);

    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //执行修改
        $data =  Cat::find($id);
        //构造调
        $data = $this->Cat->find($id);
        $data['parent_id'] = $request->parent_id;
        $data['cat_name'] = $request->cat_name;
        $res = $data->save();

        if($res){
            return redirect('admin/cat');
        }else{
            return back();
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        if(Cat::destroy){
            return 1;
        }else{
            return 0;
        }
    }

    /**
     * 自定义删除
     * @param $id
     * @return int
     */
    public function del($id)
    {
        $info = $this->Cat->where('parent_id',$id)->get();
        foreach($info as $val){
            $this->Cat->destroy($val->id);
        }
        if($this->Cat->destroy($id)){
            return 1;
        }else{
            return 0;
        }
    }



}
